Curry(柯里化),是將一個接受n個參數的function,轉變成只接受一個參數function的過程。原理是將傳入function的參數,利用閉包的特性將它們存放在另一個function中當作回傳值。
這樣做的優點是:
function number(x,y) {
return x*y;
}
number(5,2); //10
柯里化後就變成這樣:
function curryNumber(x) {
return function(y) {
return X*y;
}
}
假設固定被乘數為5,接著分別帶入乘數2和3。
所以是5*2=10,5*3=15
var multiplicandNumber = curryNumber(5);
multiplicandNumber(2); //10
multiplicandNumber(3); //15
很簡單易懂對吧? 那再看一個例子
var addNumber = function(a) {
return function(b) {
return a+b;
}
}
var addOne = add(5);
var addTwo = add(20);
addOne(2); //7
addTwo(2); //22
Curry所做的事就是美傳遞一個參數就會回傳一個新的function處理剩餘的參數,也就是一個輸入對應一個輸出
函數名稱好像寫錯了
var addNumber = function(a) {
return function(b) {
return a+b;
}
}
var addOne = add(5);
//這應該寫成 var addOne = addNumber(5);
var addTwo = add(20);
//這應該寫成 var addTwo = addNumber(20);